package com.tecnoagrosoft.zafra.control.activity.fragment;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;


import com.tecnoagrosoft.zafra.control.activity.R;
import com.tecnoagrosoft.zafra.control.db.GenericManager;
import com.tecnoagrosoft.zafra.control.db.GestorDB;
import com.tecnoagrosoft.zafra.control.model.android.ItemsList;
import com.tecnoagrosoft.zafra.control.utils.AdaptadorList;
import com.tecnoagrosoft.zafra.control.utils.UtilsGeneric;

public class ActividadesFragment extends Fragment {
	View rootView;
	GestorDB gestorDB;
	private ListView lista;
	int id_aplicacion_seguimiento;
	final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
	Calendar cal = Calendar.getInstance();
	final Date today = cal.getTime();
	private long diferencia;
	private long dias_siembra;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

		rootView = inflater.inflate(R.layout.fragment_actividades, container, false);

		loadConfiguracion();
		loadtable();

		return rootView;
	}

	private void loadtable() {

		ArrayList<ItemsList> datos = new ArrayList<ItemsList>();

		gestorDB = new GestorDB(rootView.getContext());
		SQLiteDatabase db = gestorDB.getWritableDatabase();

		GenericManager gM = new GenericManager(db);

		Cursor c = gM.executeSql("select  a._id, a.seguimiento_de_parcela_id, a.aplicacion_tipo_id, a.fecha_aplicacion, s.fecha_siembra, s.descripcion "
				+ " from aplicacion as a, seguimiento_de_parcela as s " + " where a.seguimiento_de_parcela_id=s._id and s.finalizado=0");

		int actividadesInt = 0;
		int aplicationTipoId = 0;
		if (c.moveToFirst()) {
			do {
				aplicationTipoId = c.getInt(c.getColumnIndex("aplicacion_tipo_id"));
				if (aplicationTipoId == 1) {
					try {
						Date fechaSiembra = df.parse(c.getString(c.getColumnIndex("fecha_siembra")));
						diferencia = (long) Math.floor((today.getTime() - fechaSiembra.getTime()) / (1000 * 60 * 60 * 24));

					} catch (ParseException e) {
						e.printStackTrace();
					}

					int diasFaltantes = (int) Math.floor((diferencia - dias_siembra));

					if (diasFaltantes < 0) {
						actividadesInt++;
						diasFaltantes = diasFaltantes * -1;
						datos.add(new ItemsList(Integer.parseInt(c.getString(0)), UtilsGeneric.getImageAplicacion(aplicationTipoId), getString(R.string.pulverizar), // titulo
																																										// superior
								getString(R.string.dias_restante) + ": " + diasFaltantes + " " + getString(R.string.dias) + "\n" + getString(R.string.enParcela) + ": "
										+ UtilsGeneric.createDescripcion(c.getString(c.getColumnIndex("descripcion")))));

					} else if (diasFaltantes == 0) {
						actividadesInt++;
						datos.add(new ItemsList(Integer.parseInt(c.getString(0)), UtilsGeneric.getImageAplicacion(aplicationTipoId), getString(R.string.pulverizar), // titulo
								// superior
								getString(R.string.elGranDia) + ": " + UtilsGeneric.createDescripcion(c.getString(c.getColumnIndex("descripcion")))));

					} else if (diasFaltantes <= 5) {
						actividadesInt++;
						datos.add(new ItemsList(Integer.parseInt(c.getString(0)), UtilsGeneric.getImageAplicacion(aplicationTipoId), getString(R.string.pulverizar), // titulo
																																										// superior
								getString(R.string.pasaron) + ": " + diasFaltantes + " " + getString(R.string.dias_exedentes) + "\n" + getString(R.string.enParcela) + ": "
										+ UtilsGeneric.createDescripcion(c.getString(c.getColumnIndex("descripcion")))));
					}
				}
				// aplicacion es pulverizada.
				if (aplicationTipoId == 2) {
					String descripcionInsumo;
					String diasCaducidad;
					Cursor cuCa = gM.executeSql("SELECT i.caducidad, i.nombre " + "FROM insumo as i, insumo_detalle as isdd "
							+ "WHERE isdd.insumo_id=i._id and isdd.aplicacion_id=" + c.getInt(c.getColumnIndex("_id")));
					if (cuCa.moveToFirst()) {
						do {

							descripcionInsumo = cuCa.getString(cuCa.getColumnIndex("nombre"));
							diasCaducidad = cuCa.getString(cuCa.getColumnIndex("caducidad"));
							int caducidad = Integer.parseInt(diasCaducidad);

							try {
								Date fechaAplicacion = df.parse(c.getString(c.getColumnIndex("fecha_aplicacion")));
								diferencia = (long) Math.floor((today.getTime() - fechaAplicacion.getTime()) / (1000 * 60 * 60 * 24));

							} catch (ParseException e) {
								e.printStackTrace();
							}

							int diasFaltantes = (int) Math.floor((caducidad - diferencia));

							if (diasFaltantes > 0) {
								actividadesInt++;
								datos.add(new ItemsList(Integer.parseInt(c.getString(0)), UtilsGeneric.getImageAplicacion(c.getInt(c.getColumnIndex("aplicacion_tipo_id"))),
										descripcionInsumo, // titulo superior
										getString(R.string.dias_Caducidad) + ": " + diasCaducidad + " " + getString(R.string.dias) + "\n" + getString(R.string.faltan) + ": "
												+ diasFaltantes + "\n" + getString(R.string.enParcela) + ": "
												+ UtilsGeneric.createDescripcion(c.getString(c.getColumnIndex("descripcion")))));

							} else {
								if (diasFaltantes >= 5) {
									actividadesInt++;
									// setear "staus" a false.
									// diasFaltantes = diasFaltantes * -1;

									datos.add(new ItemsList(Integer.parseInt(c.getString(0)), UtilsGeneric.getImageAplicacion(c.getInt(c.getColumnIndex("aplicacion_tipo_id"))),
											descripcionInsumo, // titulo
																// superior
											getString(R.string.aCaducado)
													+ ": " // titulo infeerior.
													+ diasFaltantes + " " + getString(R.string.dias) + "\n" + getString(R.string.enParcela) + ": "
													+ UtilsGeneric.createDescripcion(c.getString(c.getColumnIndex("descripcion")))));
								}
							}
						} while (cuCa.moveToNext());
					}
					cuCa.close();
				}

			} while (c.moveToNext());
		} else {

			datos.add(new ItemsList(0, R.drawable.seguimiento, getString(R.string.noActividad), getString(R.string.graciasConfiar)));

		}
		
		if (actividadesInt==0){
			datos.add(new ItemsList(0, R.drawable.seguimiento, getString(R.string.noActividad), getString(R.string.graciasConfiar)));
		}

		TextView cantidadActividad = (TextView) rootView.findViewById(R.id.texto_actividades);
		cantidadActividad.setText(getString(R.string.cantidad) + ": " + actividadesInt);

		// cierro la conexion
		c.close();
		gM.close();
		db.close();
		gestorDB.close();

		lista = (ListView) rootView.findViewById(R.id.ListView_actividades);
		lista.setAdapter(new AdaptadorList(rootView.getContext(), R.layout.item_list, datos) {

			@Override
			public void onEntrada(Object entrada, View view) {

				if (entrada != null) {

					TextView texto_id_item = (TextView) view.findViewById(R.id.texto_item_id);
					if (texto_id_item != null)
						texto_id_item.setText(((ItemsList) entrada).getId().toString());

					TextView texto_superior_entrada = (TextView) view.findViewById(R.id.textoTitulo_item_list);
					if (texto_superior_entrada != null)
						texto_superior_entrada.setText(((ItemsList) entrada).getTextoTitulo());

					TextView texto_inferior_entrada = (TextView) view.findViewById(R.id.textoDescripcion_item_list);
					if (texto_inferior_entrada != null)
						texto_inferior_entrada.setText(((ItemsList) entrada).getTextoDescripcion());

					ImageView imagen_entrada = (ImageView) view.findViewById(R.id.imagen_item_list);
					if (imagen_entrada != null)
						imagen_entrada.setImageResource(((ItemsList) entrada).getIdImagen());

				}

			}
		});

	}

	private void loadConfiguracion() {

		gestorDB = new GestorDB(rootView.getContext());
		SQLiteDatabase db = gestorDB.getReadableDatabase();
		GenericManager gM = new GenericManager(db);

		String[] column = { "_id", "valor", "llave" };
		Cursor c = gM.getAllObjects("configuracion", column);

		if (c.moveToFirst()) {

			do {
				if (c.getString(c.getColumnIndex("llave")).equals("dias_siembra")) {
					dias_siembra = c.getLong(c.getColumnIndex("valor"));
				}

			} while (c.moveToNext());
		}
		c.close();
		db.close();
		gestorDB.close();

	}

}
